Состав команды:
Ляпина Екатерина, Дмитрий Гайдаржи
Для анализа были взяты следующие данные: https://drive.google.com/file/d/0Bw_qUDxhcJMjdXNpTDhPb3R0alU/view?usp=sharing
Объектом исследования является финансовое состояние предприятия и индикаторы его способности расплатиться по долгам (банкротство) за итоговый период аудита.
Предметом исследования выступают причинно-следственные связи и зависимости экономических показателей, формирующиеся в результате деятельности фирмы.
Цель работы:
Установление структурных связей и закономерностей между элементами исследуемой системы в выбранной предметной области. Последующая интерпретация имеющихся данных, анализ применимости полученных результатов и создание наилучшей модели для дальнейшего прогнозирования подобных данных. В практическом смысле, аналитические модели могут успешно использоваться для решения задач выявления банкротства фирмы, и предупреждения подобных ситуаций.
Задачи:
Прохождение этапов извлечения, очистки и трансформации сырых данных. Использование разных методик и средств машинного обучения: деревьев решений, кластеризации, нейронных сетей
Практическая задача сводится к необходимости выявления, в какой степени какие факторы определяют состоятельность компании и почему.
В нашем наборе данных 241 наблюдений и 7 переменных. Исходный файл с данными в формате xlxs.
Описательная статистика по нашей выбоке:
| ID | Ликвидность.активов | Рентабельность.активов | Доходность.активов | Автономность | Оборачиваемость.активов | Банкрот | |
|---|---|---|---|---|---|---|---|
| Length:248 | Min. :0.0000000 | Min. :-8.994547754 | Min. :-8.114354465 | Min. :-0.95067398 | Min. : 0.0000000 | Min. :0.00 | |
| Class :character | 1st Qu.:0.4548752 | 1st Qu.:-0.030530560 | 1st Qu.:-0.026613013 | 1st Qu.: 0.05171395 | 1st Qu.: 0.4609703 | 1st Qu.:0.00 | |
| Mode :character | Median :0.6639313 | Median : 0.005235946 | Median : 0.008363906 | Median : 0.49220671 | Median : 1.1631490 | Median :0.00 | |
| NA | Mean :0.6356584 | Mean :-0.083859172 | Mean :-0.069242899 | Mean : 2.11329067 | Mean : 1.4467805 | Mean :0.25 | |
| NA | 3rd Qu.:0.8120194 | 3rd Qu.: 0.054041896 | 3rd Qu.: 0.072233372 | 3rd Qu.: 1.64777963 | 3rd Qu.: 2.0472354 | 3rd Qu.:0.25 | |
| NA | Max. :1.0000000 | Max. : 1.500000000 | Max. : 1.798073030 | Max. :57.43253968 | Max. :17.8913391 | Max. :1.00 |
Диаграммы рассеивания для имеющихся переменных:
Мы решили исключить выбросы из наших данных. После преобразований диаграммы Бокса-Вискера для наших переменных стали такими:
Зависимости Банкротства от Ликвидности активов:
Построим диаграмму Бокса-Вискера для зависимости Банкротства от Рентабельности активов:
Построим диаграмму Бокса-Вискера для зависимость Банкротства от Доходности активов:
Построим диаграмму Бокса-Вискера для зависимости Банкротства от Автономности активов:
Построим диаграмму Бокса-Вискера для зависимости Банкротства от Оборачиваемости активов:
Для проверки полученной модели мы разделили все имеющиеся данные в соотношении 85:15. То есть тренировочными данными мы сделали 211 записей, мы выбрали их случайным образом из нашей выборки так, чтобы подвыборка была репрезентативная нашим данным.
Построим матрицу Пирсона для наших тренировочных данных:
| Ликвидность.активов | Рентабельность.активов | Доходность.активов | Автономность | Оборачиваемость.активов | |
|---|---|---|---|---|---|
| Ликвидность.активов | |||||
| Рентабельность.активов | 0.22** | ||||
| Доходность.активов | 0.22** | 0.99*** | |||
| Автономность | 0.04 | 0.17* | 0.19** | ||
| Оборачиваемость.активов | 0.09 | 0.30*** | 0.33*** | 0.04 | |
| Банкрот | 0.10 | -0.17* | -0.19** | -0.14* | -0.19** |
Построение моделей мы начали с бинарной логистической регрессии. Она наоболее всего подходит в случаях, когда зависимая переменная является дихотомической. Для нахождения коэффициентов логистической регрессии, использовался метод максимального правдоподобия, уже встроенный в пакет языка R.
В процессе исследования оказалось, что Оборачиваемость активов и Автономность мало влияют на Банкротство, эти переменные были исключены из итоговой модели. Полученная регрессия также применялась для прогнозирования.
Мы используем ROC-кривую для представления результатов прогнозирования нашей модели. По сути мы построили функцию, которая считает долю истинно положительных примеров (True Positives Rate) и ложно положительных примеров (False Positives Rate). Мы взяли порог отсечения равным 0.4 для этих тестовых данных.
Мы также высчитываем показатель AUC(area under ROC curve) для выявления прогнозной силы нашей модели. Он также будет использоваться в последующем для сравнительного анализа нескольких моделей. В результате построения вышло, что наша модель имеет показатель AUC = 0.41. В литературе иногда приводится следующая экспертная шкала для значений AUC, по которой можно судить о качестве модели:
В последующем мы построили регрессионное дерево, воспользовавшись алгоритмом CART. Дерево было использовано для дальнейшего прогнозирования и сравнения моделей уже описанными способами.
Построим график зависимости кросс-валидационных ошибок от числа расщеплений и сложности модели. Также выведем итоговое деревого после операции обрезки:
После выявления наилучшей модели мы также провели ROC-анализ:
В результате построения вышло, что наша модель имеет показатель AUC равный 0.67. Мы также воспользовались методом random forests для дальнейшего прогнозирования и сравнения моделей. График количества ошибок от количества использованых в методе random forest деревьев выглядит следующим образом:
После построения мы также провели ROC-анализ:
В результате построения вышло, что наша модель имеет AUC равный 0.76.
Последним регрессионным деревом стало дерево, построенное с использованием алгоритма C.5.0:
В результате построения вышло, что наша модель имеет AUC равный 1. Для полноты конкуренции мы отсроили также нейронную сеть (однослойный персептрон):
В результате построения вышло, что наша модель имеет AUC равный 0.65.
Метод K-средних Определим оптимальное количества кластеров методом “плечо”. Данный метод рассматривает изменение диспресии случайной величины. Следует выбрать такое количество кластеров, при котором, добавление очередного кластера не придаст значительных улучшений в моделировании данных. На графике показано, что с каждым добавлением очередного кластера, изменчивость дисперсии уменьшается. В нашем случае “плечо” соответствует количеству кластеров 5. Определив оптимальное количество кластеров, был применен метод k - средних, который разбил данные на 5 кластеров. Результат работы данного алгоритма можно продемонстрировать в виде следующей матрицы:
Рассмотрем распределение банкротов полученных кластерах
| № кластера | Не банкрот | Банкрот | Доля в % |
|---|---|---|---|
| 1 | 39 | 5 | 11.36 |
| 2 | 48 | 13 | 21.31 |
| 3 | 8 | 8 | 50.00 |
| 4 | 28 | 2 | 6.67 |
| 5 | 35 | 25 | 41.67 |
Исходя из количества банкротов в каждом кластере можно вычислить их долю. Таким образом, определив принадлежность очередной фирмы к одному из рассмотренных кластеров, можно определить шанс её банкротства. Протестируем полученные вероятности на выделенных тестовых данных, которые не использовались при разбиении данных на кластеры:
| № кластера | Не банкрот | Банкрот | Доля в % |
|---|---|---|---|
| 1 | 8 | 0 | 0 |
| 2 | 9 | 3 | 25 |
| 4 | 1 | 1 | 50 |
| 5 | 6 | 2 | 25 |
Из полученных результатов, можно сделать вывод, что полученные вероятности на этапе разбиения исходных данных на кластерах, довольно точно классифицировали тестовые данные. Соотношение фирм банкротов к не банкротам в каждом из кластеров сохранилось.
В качестве дополнительного анализа, можно рассмотреть зависимость показателя банкротства фирмы от каждой независимой переменной. Например для параметра Ликвидность активов, распределение фирм выглядит следующим образом:
Для параметра Рентабельность активов:
Доходность активов:
Автономность:
Оборачиваемость активов:
Наивный классификатор Байеса
Наивный байесовский классификатор — простой вероятностный классификатор, основанный на применении Теоремы Байеса со строгими (наивными) предположениями о независимости.
Достоинством наивного байесовского классификатора является малое количество данных для обучения, необходимых для оценки параметров, требуемых для классификации.
#Наивный классификатор
naivesource <- data.frame(training_data$values)
naivesource$Банкрот <- training_data$Банкрот
classifier<-naiveBayes(as.factor(Банкрот) ~ ., data = naivesource)
predicted = predict(classifier, testing_data$values);
predicted<-as.numeric(as.character(predicted))
#Точность модели
i<-0;
for (j in 1:length(predicted)){
if (predicted[j] == as.numeric(as.character(testing_data$Банкрот[j]))) {
i<-i+1;
}
}
i<-i/length(predicted)*100
Совпадение предсказаний составило 83.3333333333%
Отобразим распределение результатов байесовского классификатора на гистограмме